import type { rulesItem } from './interface';
import type { formItem } from './../tm-form/interface';
export function validateFunCall(rules: Array<rulesItem>, value: any) {
  rules = rules.map((el) => {
    if (typeof el.validator === 'function' && el.required === true) {
      return el;
    } else if (typeof el.validator === 'boolean' && el.required === true) {
      return {
        ...el,
        validator: (val: any) => {
          if (val === null || val === '' || typeof val == 'undefined')
            return false;
          if (typeof val === 'object') {
            if (Array.isArray(val)) {
              if (val.length == 0) return false;
            } else if (
              Object.keys(val).length === 0 &&
              val.constructor === Object
            ) {
              return false;
            }
          }
          if (typeof val === 'boolean') {
            return val;
          }
          if (typeof val === 'number') {
            if (isNaN(val)) return false;
            if (Number(val) < 0) return false;
          }
          if (typeof val === 'string') {
            if (val.trim().length == 0) return false;
          }
          return true;
        }
      };
    } else {
      return {
        ...el,
        validator: (val: string | number) => {
          return true;
        }
      };
    }
  });
  let rules_filter: Array<rulesItem> = rules.filter((el) => {
    return typeof el.validator === 'function' && el.required === true;
  });
  let rules_fun: Array<rulesItem> = rules_filter.map((el) => {
    let validator = true;
    if (typeof el.validator === 'function') {
      let vr = el.validator(value);
      if (vr) {
        validator = true;
      } else {
        validator = false;
      }
    } else {
      validator = true;
    }

    return {
      message: String(el.message),
      validator: validator
    };
  });

  return rules_fun;
}

export function getObjectVal(obj: any, field = '') {
  if (field == '') return obj;
  var arr = field.split('.');
  while (arr.length > 1) {
    let key = String(arr.shift());
    obj = obj[key];
  }
  return obj[arr[0]];
}
